问题描述:
输入一个整数n,计算n的阶乘
1<=n<=1000
我们第一印象首先想到的就是用循环来直接计算n的阶乘,可是阶乘的时间复杂度是最高的,也就是说对于数字较大的阶乘我们无法通过直接计算来获得。
那么这么来计算较大数字的阶乘呢
我们可以建立一个数组,将数字的个位,十位…存放在数组中,数字的大小在0~9,这样就完成了对于计算量很大的数字的存储,输出。
那么这么计算呢,其实也很简单,我们只需要将数组中的每一位和1~n相乘就可以了。
#include<stdio.h>
#define N 10000
int c[N];
int m[N];//存储进位
int finish=0;//控制输出
int x;
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=N;i++){
if(i==1){
c[i] = 1;//个位为一
} else{
c[i] = 0;//其余均为0
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=N;j++){
c[j] = c[j]*i;
if(c[j-1]>=10){//在计算第i个的时候,要将第i-1个判断
m[j-1] = c[j-1]/10;
c[j-1] = c[j-1]%10;
c[j] = c[j] + m[j-1];
}
}
}
for(int i=N;i>=1;i--){
if(c[i]!=0){
finish = 1;
x = i;
if(finish){
for(int j=x;j>0;j--){
printf("%d",c[j]);
}
break;
}
}
}
return 0;
}``